/**
 * 认证状态管理行为
 * 用于页面级的认证状态管理和用户信息输出
 */
import auth from '../utils/auth';

const useAuthBehavior = Behavior({
  data: {
    isLoggedIn: false,
    userInfo: null,
    userLevel: {},
  },

  attached() {
    this.checkAuthStatus();
  },

  pageLifetimes: {
    show() {
      this.checkAuthStatus();
      this.refreshUserInfoIfNeeded();
    }
  },

  methods: {
    /**
     * 检查认证状态并输出用户信息
     */
    checkAuthStatus() {
      const isLoggedIn = auth.isLoggedIn();
      const userInfo = auth.getCurrentUser();
      const userLevel = auth.getUserLevel();
      
      // 输出用户ID到控制台
      const currentPages = getCurrentPages();
      const currentPage = currentPages[currentPages.length - 1];
      const pageRoute = currentPage ? currentPage.route : 'unknown';
      
      console.log(`\n=== 页面认证状态检查 [${pageRoute}] ===`);
      
      if (userInfo && userInfo.id) {
        console.log('✅ 用户已登录');
        console.log('👤 用户ID:', userInfo.id);
        console.log('📝 用户名:', userInfo.name || userInfo.username || '未设置');
        console.log('🏷️ 用户角色:', userInfo.role || 'user');
        console.log('⭐ 用户等级:', userLevel.name || '普通用户');
        console.log('📱 手机号:', userInfo.phone || '未绑定');
        console.log('📧 邮箱:', userInfo.email || '未绑定');
        console.log('📧 积分:', userInfo.points || 0);
      } else if (isLoggedIn) {
        console.log('⚠️ 用户已登录，但无法获取用户详细信息');
        const token = auth.getToken();
        if (token) {
          console.log('🔐 Token存在:', token.substring(0, 10) + '...');
        }
      } else {
        console.log('❌ 用户未登录');
      }
      
      console.log('=====================================\n');
      
      // 更新页面数据
      this.setData({
        isLoggedIn,
        userInfo,
        userLevel
      });
      
      return { isLoggedIn, userInfo, userLevel };
    },

    /**
     * 需要登录检查
     */
    requireLogin(options = {}) {
      return auth.requireLogin(options);
    },

    /**
     * 需要权限检查
     */
    requirePermission(permissions, options = {}) {
      return auth.requirePermission(permissions, options);
    },

    /**
     * 需要角色检查
     */
    requireRole(roles, options = {}) {
      return auth.requireRole(roles, options);
    },

    /**
     * 跳转到登录页
     */
    navigateToLogin(redirectUrl) {
      auth.navigateToLogin(redirectUrl);
    },

    /**
     * 退出登录
     */
    logout(options = {}) {
      auth.logout(options);
    },

    /**
     * 检查权限并执行回调
     */
    checkPermissionAndExecute(permissions, callback, options = {}) {
      auth.checkPermissionAndExecute(permissions, callback, options);
    },

    /**
     * 从后端刷新用户信息（避免频繁刷新）
     */
    async refreshUserInfoIfNeeded() {
      if (!auth.isLoggedIn()) {
        return;
      }

      // 检查上次刷新时间，避免频繁请求
      const lastRefreshTime = wx.getStorageSync('last_user_refresh') || 0;
      const now = Date.now();
      const refreshInterval = 5 * 60 * 1000; // 5分钟间隔

      if (now - lastRefreshTime < refreshInterval) {
        return;
      }

      try {
        const success = await auth.refreshUserInfo();
        if (success) {
          wx.setStorageSync('last_user_refresh', now);
          // 检查默认密码
          auth.handleDefaultPassword();
          // 重新检查状态以输出最新信息
          this.checkAuthStatus();
        }
      } catch (error) {
        console.error('刷新用户信息失败:', error);
      }
    }
  }
});

export default useAuthBehavior; 